package com.mall.service;

import com.alipay.api.AlipayApiException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.mall.DTO.WaresDTO;
import com.mall.pojo.Wares;
import com.mall.utils.R;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author xiao-chen
 * @since 2023-04-20
 */
public interface IWaresService extends IService<Wares> {
    /**
     * 查询商品及其所属分类
     *
     * @param page     页码
     * @param pageSize 页大小
     * @param wareName 查询的商品名
     * @return com.mall.utils.R<java.util.Map < java.lang.String, java.lang.Object>>
     * @author cxx
     * @date 2023/4/25 22:33
     */
    Page<WaresDTO> getWaresWithclassName(Integer page, Integer pageSize, String wareName);

    /**
     * 修改商品和添加商品
     *
     * @param ware 商品的各类信息
     * @return boolean
     * @author cxx
     * @date 2023/4/26 11:11
     */
    boolean saveWaresWithclassName(WaresDTO ware);

    /**
     * @param ware 商品的新信息
     * @return boolean
     * @author cxx
     * @date 2023/4/26 11:21
     */
    boolean updateWaresByIdWithclassName(WaresDTO ware);

    /**
     * 根据分类ID获取类下商品
     *
     * @param categoryId
     * @return java.util.List<com.mall.pojo.Wares>
     * @author cxx
     * @date 2023/6/2 20:00
     */
    List<Wares> getWaresByCategoryId(Long categoryId);

    /**
     * 根据要购买的商品集合,生成订单
     *
     * @param list
     * @return void
     * @author cxx
     * @date 2023/5/6 14:29
     */
    String buyWareAndsaveOrderDetail(List<WaresDTO> list) throws Exception;

    /**
     * 根据商品id秒杀商品
     *
     * @param wareId
     * @return java.lang.String
     * @author cxx
     * @date 2023/6/2 20:09
     */
    R<String> secKillWareById(Long wareId) throws JsonProcessingException, AlipayApiException;

    Long getWareIdByName(String name);
}
